package com.zw.cloud.common.utils.zing;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.Objects;

/**
 * @author zhengwei
 * @date 2022/4/17 21:58
 */
public class QrCodeUtils {
    public static final String FORMAT = "JPG";
    // 二维码尺寸
    private static final int QRCODE_SIZE = 470;

    /**
     * 生成二维码
     * @param content      二维码内容
     * @param logoFile     logo地址
     */
    public static BufferedImage createQrCode(String content, MultipartFile logoFile) throws Exception {
        QrConfig qrConfig = QrConfig.create()
                .setHeight(QRCODE_SIZE)
                .setWidth(QRCODE_SIZE)
                //.setForeColor(Color.CYAN)
                //.setBackColor(Color.GRAY)
                .setErrorCorrection(ErrorCorrectionLevel.H)
                .setMargin(1);
        if (Objects.nonNull(logoFile)) {
            Image src = ImageIO.read(logoFile.getInputStream());
            qrConfig.setImg(src)
                    .setRatio(8);
        }
        return QrCodeUtil.generate(content, qrConfig);
    }

    /**
     * 生成二维码
     * @param content      二维码内容
     * @param logoFile     logo地址
     */
    public static String createQrCodeToBase64(String content, MultipartFile logoFile) throws Exception {
        BufferedImage bufferedImage = createQrCode(content, logoFile);
        try(ByteArrayOutputStream os = new ByteArrayOutputStream()) {
            ImageIO.write(bufferedImage, "png", os);      //添加图片标识
            return "data:image/png;base64," + Base64.encode(os.toByteArray());
        }
    }

    /**
     * 生成二维码（指定路径保存）
     * @param content 内容
     * @param logoFile logo图片地址（内嵌图片）
     * @param destPath 生成二维码存放地址
     * @throws Exception
     */
    public static void createQrCodeToDestPath(String content, MultipartFile logoFile, File destPath) throws Exception {
        QrConfig qrConfig = QrConfig.create()
                .setHeight(QRCODE_SIZE)
                .setWidth(QRCODE_SIZE)
                .setForeColor(Color.CYAN)
                .setBackColor(Color.GRAY)
                .setErrorCorrection(ErrorCorrectionLevel.H)
                .setMargin(1);
        if (Objects.nonNull(logoFile)) {
            Image src = ImageIO.read(logoFile.getInputStream());
            qrConfig.setImg(src)
                    .setRatio(8);
        }
        QrCodeUtil.generate(content, qrConfig,destPath);
    }


    /**
     * 解析二维码
     */
    public static String decodeByFile(File file) {
        return QrCodeUtil.decode(file);
    }

    //测试一：
    public static void main(String[] args) throws Exception {
        File file = QrCodeUtil.generate("https://hutool.cn/", 300, 300, FileUtil.file("d:/qrcode.jpg"));
        System.out.println(decodeByFile(file));

        /**
         * 1. N：姓名（Name）
         * 2. TEL：电话号码（Telephone Number）
         * 3. EMAIL：电子邮件地址（Email Address）
         * 4. NOTE：备注（Note）
         * 5. ADR：地址（Address）
         * 6. URL：网址（URL）
         * 7. ORG：组织（Organization）
         * 8. TITLE：职位（Title）
         * 9. BDAY：生日（Birthday）
         * 10. PHOTO：照片（Photo）
         */
        /*String destPath = "D:\\jian0.jpg";

        StringBuilder builder = new StringBuilder("MECARD:");
        builder.append("N:").append("简相军")
                .append(";TEL:").append("18530069297")
                .append(";VOICE:").append("010-62100001")
                .append(";EMAIL:").append("543190914@qq.com")
                .append(";TITLE:").append("CEO")
                .append(";ORG:").append("河南灯饰有限公司")
                .append(";ADR:").append("北京市朝阳区北四环中路35号")
                .append(";NOTE:").append("备注信息")
                .append(";;");
//        String content = "BEGIN:VCARD\n" +
//                "VERSION:3.0\n" +
//                "N:简相军\n" +
//                "TEL:18530069297\n" +
//                "URL:www.baidu.com\n"+
//                "ADR:河南郑州\n" +
//                "ORG:河南灯饰有限公司\n" +
//                "TITLE:CEO\n" +
//                "NOTE:呼呼测试下吧。。。\n" +
//                "END:VCARD";
        QrCodeUtils.encodeToDestPath(builder.toString(),null,new File(destPath));*/
    }
}
